package org.jsola.hr.dao;

import org.apache.ibatis.annotations.Param;
import org.jsola.hr.dto.SalaryBillListDTO;
import org.jsola.hr.dto.SalaryBillUpdateDTO;
import org.jsola.hr.entity.SalaryBillDO;
import org.jsola.hr.query.SalaryBillQuery;
import org.jsola.hr.query.SalaryBillSendRelQuery;
import org.jsola.hr.vo.SalaryBillListRelationVO;
import org.jsola.hr.vo.SalaryBillListVO;
import org.jsola.hr.vo.SalaryBillVO;
import org.jsola.orm.mapper.IJsolaMapper;
import org.springframework.stereotype.Repository;

import java.util.List;


/**
 * @author zhr
 */
@Repository("hrSalaryBillDAO")
public interface ISalaryBillDAO extends IJsolaMapper<SalaryBillDO> {
    /**
     * 查询工资明细
     * @param salaryBillQuery 查询条件
     * @param  siteId 站点id
     * @return  符合条件的工资明细结果
     */
    List<SalaryBillVO> selectSalaryDetail(@Param("salaryBillQuery") SalaryBillQuery salaryBillQuery, @Param("siteId")String siteId);

    /**
     * 查看员工工资条
     * @param salaryBillUpdateDTO
     * @param siteId
     * @return
     */
    SalaryBillVO getSalaryBillRelation(@Param("salaryBillUpdateDTO") SalaryBillUpdateDTO salaryBillUpdateDTO, @Param("siteId") String siteId);

    /**
     * 查看员工工资条（按年月查询最新一次记录）
     * @param salaryBillUpdateDTO
     * @param siteId
     * @return
     */
    SalaryBillVO getSalaryBillRelationLast(@Param("salaryBillUpdateDTO") SalaryBillUpdateDTO salaryBillUpdateDTO, @Param("siteId") String siteId);

    /**
     * 按年月查询最新的工资条列表
     * @param salaryBillQuery 查询条件
     * @param siteId 所属站点id
     * @return 工资条列表
     */
    List<SalaryBillVO> getSalaryBillRelationLastList(@Param("salaryBillQuery") SalaryBillQuery salaryBillQuery, @Param("siteId") String siteId);

    /**
     * 查询工资条列表分页的统计数据
     * @param salaryBillQuery 查询条件
     * @return 工资条列表分页及统计对象
     */
    List<SalaryBillListDTO> selectSalaryBillListCount(@Param("salaryBillQuery") SalaryBillQuery salaryBillQuery);

    /**
     * 根据发放信息查询工资条分页
     * @param salaryBillSendRelQuery 查询条件
     * @return 工资条分页
     */
    List<SalaryBillListVO> salaryBillListPageBySend(@Param("salaryBillSendRelQuery") SalaryBillSendRelQuery salaryBillSendRelQuery);

    /**
     * 根据发放信息查询工资条分页详情
     * @param salaryBillSendRelQuery 查询条件
     * @return 工资条分页
     */
    List<SalaryBillListVO> salaryBillPageBySendDetail(@Param("salaryBillSendRelQuery") SalaryBillSendRelQuery salaryBillSendRelQuery);
}

